package com.njtoyo.taxi.admin.service.business.ride;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.njtoyo.taxi.admin.mapper.master.entity.OrderManageAllVo;
import com.njtoyo.taxi.admin.mapper.master.entity.OrderManageVo;
import com.njtoyo.taxi.admin.mapper.master.entity.Ride;
import com.njtoyo.taxi.admin.mapper.master.entity.SimpleCall;
import com.njtoyo.taxi.admin.rest.presenter.business.ride.RideDetailPresenter;
import com.njtoyo.taxi.admin.rest.presenter.business.ride.RideDialListPresenter;
import com.njtoyo.taxi.admin.rest.presenter.business.ride.RideListPresenter;
import com.njtoyo.taxi.admin.rest.presenter.business.ride.RideTrackPresenter;
import com.njtoyo.taxi.admin.rest.wrapper.business.ride.*;
import com.njtoyo.taxi.entity.backend.AdminUser;
import com.taxi.entity.common.RestResult;

import java.math.BigDecimal;
import java.util.List;

public interface RideService {
    RestResult<IPage<RideListPresenter>> getList(AdminUser adminUser, RideQueryWrapper wrapper);

    RestResult<RideDetailPresenter> getRideDetail(Long id);

    RestResult<Boolean> suspiciousConfirm(Long id, SuspiciousConfirmWrapper wrapper);

    RestResult<Boolean> onlineOrderSetOffline(AdminUser adminUser,Long id);

    RestResult<Boolean> offlineOrderSetOnline(Long id);

    RestResult<List<RideDialListPresenter>> getDialList(AdminUser adminUser, Long id);

    RestResult<Boolean> driverCancellationResponsibilityEliminate(Long id);

    RestResult<Boolean> updateState(Long id, UpdateStateWrapper wrapper);

    /**
     * 乘客改无责
     */
    RestResult<Boolean> customerCancellationResponsibilityEliminate(Long id);

    /**
     * 乘客改无责-退款
     */
    RestResult<Boolean> customerCancellationResponsibilityRefund(Long id);

    RestResult<Boolean> updateOrderAmount(Long id, UpdateOrderAmountWrapper wrapper);

    RestResult<RideTrackPresenter> getTrack(Long id);

    RestResult<Boolean> closeDriverAutomatic(Long id, CloseDriverAutomaticWrapper wrapper);

    RestResult<Boolean> cancel(Long id);

    RestResult<Boolean> orderRefund(Long id);

    RestResult<SimpleCall> passengerInfo(String mobileNumber);

    RestResult<IPage<RideListPresenter>> suspiciousPage(AdminUser adminUser, RideQueryWrapper wrapper);

    List<Ride> getListByCallIds(List<Long> callIds);

    RestResult privacyCallLogByRideId(Long rideId);

    RestResult willRefundDetail(Long id);

    RestResult privacyCallDetailLog(String subscriptionId);

    RestResult finishOrder(Long rideId);

    RestResult getRefundCount(Long callId,Integer callCategory);


    RestResult createOrderBill(Integer rideId, BigDecimal taxiAmount, BigDecimal tollAmount, BigDecimal otherAmount);

    //订单管理查询全部
    OrderManageAllVo getAll(AdminUser adminUser, OrderManageQueryDto queryDto);
    RestResult<Boolean> orderRefundNew(AdminUser adminUser,Long rideId, BigDecimal refundAmount, String refundType,String refundReason);

    RestResult refundListByRideId(Long rideId);
}
